package model.lugares;

import java.util.ArrayList;
import java.util.List;

public class MapaActual {
	
	private Ciudad actualPolicia;
	private Ciudad actualLadron;
	private ArrayList <Ciudad> ciudadesDisponibles; //tiene estas 2 ciudades y otras
	

	public MapaActual(Ciudad actualPolicia, Ciudad actualLadron, List<Ciudad> ciudadesIncorrectas) {
		this.actualPolicia = actualPolicia;
		this.actualLadron = actualLadron;
		ciudadesDisponibles = new ArrayList <Ciudad>();
		ciudadesDisponibles.add(actualPolicia);
		ciudadesDisponibles.add(actualLadron);
		for ( Ciudad c : ciudadesIncorrectas)
			ciudadesDisponibles.add(c);	
	}
	
	public void agregarCiudad(Ciudad otra) throws NoSePuedeAgregarCiudadException{
		if (otra.compareTo(actualPolicia) == 0 ||  otra.compareTo(actualLadron) == 0){
			throw new NoSePuedeAgregarCiudadException();
		}else{
			ciudadesDisponibles.add(otra);
		}
	}

	public int calcularDistanciaA(Ciudad ciudad) {
		return actualPolicia.calcularDistanciaA(ciudad);
	}
	
	public Ciudad viajar(Ciudad ciudad) throws LaCiudadNoEstaDisponibleException {
		if ( ciudadesDisponibles.contains(ciudad) == true){
			actualPolicia = ciudad;
			return actualPolicia;
		}
		else{
			throw new LaCiudadNoEstaDisponibleException();
		}
	}
	
	public boolean estuvoElLadronAqui(){
		return actualPolicia == actualLadron;
	}

	public ArrayList<Ciudad> obtenerPosiblesDestinos() {
		return ciudadesDisponibles;
	}

	public int cantCiudades() {
		return ciudadesDisponibles.size();
	}

	public Ciudad obtenerCiudadActual() {
		return actualPolicia;
	}
	
	//solo para tests
	public Ciudad actualLadron(){
		return actualLadron;
	}

}
